// ==UserScript==
// @name         YouTube自动剧院模式
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  YouTube页面加载完成后自动切换到剧院模式
// @author       Your name
// @match        *://*.youtube.com/watch?v=*
// @match        *://youtube.com/watch?v=*
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';

    // 检查剧院模式按钮状态
    function checkTheaterModeStatus() {
        // 查找剧院模式按钮
        const theaterButton = document.querySelector('.ytp-size-button.ytp-button');
        
        if (!theaterButton) {
            return 'not_found';
        }

        // 检查按钮的tooltip标题来判断当前状态
        const tooltipTitle = theaterButton.getAttribute('data-tooltip-title');
        const ariaLabel = theaterButton.getAttribute('aria-label');
        
        if (tooltipTitle && tooltipTitle.includes('Theater mode')) {
            return 'normal'; // 当前是普通模式，可以切换到剧院模式
        } else if (tooltipTitle && tooltipTitle.includes('Default view')) {
            return 'theater'; // 当前已经是剧院模式
        } else if (ariaLabel && ariaLabel.includes('Theater mode')) {
            return 'normal';
        } else if (ariaLabel && ariaLabel.includes('Default view')) {
            return 'theater';
        }
        
        return 'unknown';
    }

    // 点击剧院模式按钮
    function clickTheaterModeButton() {
        const theaterButton = document.querySelector('.ytp-size-button.ytp-button');
        
        if (theaterButton) {
            try {
                // 使用click方法点击按钮
                theaterButton.click();
                console.log('已点击剧院模式按钮');
                return true;
            } catch (error) {
                console.error('点击剧院模式按钮时发生错误:', error);
                return false;
            }
        } else {
            console.warn('未找到剧院模式按钮');
            return false;
        }
    }

    // 主要逻辑
    function autoTheaterMode() {
        const status = checkTheaterModeStatus();
        
        console.log('当前剧院模式状态:', status);
        
        switch (status) {
            case 'normal':
                // 当前是普通模式，需要切换到剧院模式
                console.log('检测到普通模式，准备切换到剧院模式');
                if (clickTheaterModeButton()) {
                    console.log('成功切换到剧院模式');
                    return true;
                }
                break;
            case 'theater':
                // 当前已经是剧院模式，不需要操作
                console.log('当前已经是剧院模式，无需操作');
                return true;
            case 'not_found':
                console.warn('未找到剧院模式按钮，可能页面还未完全加载');
                return false;
            case 'unknown':
                console.warn('无法确定剧院模式按钮状态');
                return false;
        }
        
        return false;
    }

    // 等待视频播放器加载完成
    function waitForPlayer() {
        const player = document.querySelector('#movie_player');
        if (player) {
            // 播放器已加载，尝试切换剧院模式
            if (autoTheaterMode()) {
                return true;
            }
        }
        return false;
    }

    // 使用MutationObserver监听页面变化
    function setupObserver() {
        let attempts = 0;
        const maxAttempts = 20; // 最多尝试20次
        
        const observer = new MutationObserver(() => {
            attempts++;
            
            if (waitForPlayer()) {
                console.log('剧院模式设置完成，停止监听');
                observer.disconnect();
            } else if (attempts >= maxAttempts) {
                console.warn('达到最大尝试次数，停止监听');
                observer.disconnect();
            }
        });

        // 开始监听页面变化
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });

        // 设置超时，10秒后自动停止监听
        setTimeout(() => {
            observer.disconnect();
            console.log('超时停止监听');
        }, 10000);
    }

    // 页面加载完成后执行
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', () => {
            setTimeout(setupObserver, 1000); // 延迟1秒后开始监听
        });
    } else {
        // 如果页面已经加载完成，直接执行
        setTimeout(() => {
            if (!waitForPlayer()) {
                setupObserver();
            }
        }, 1000);
    }
})();
